/**
 * 主要思想： 是与原型式继承紧密相关的一种思路。寄生式继承的思路与寄生构造函数和工厂模式类似，即创建一个仅用于封装继承过程的函数，该函数在内部
 *          以某种方式增强对象，最后再像真地是它做了所有工作一样返回对象
 * 
 * 优点：
 *      1. 在考虑对象而不是自定义类型和构造函数的情况下，寄生式继承也是一种有用的模式
 * 缺陷：
 *      1. 使用寄生式继承来为对象添加函数，会由于不能做到函数复用而效率低下
 *      2. 同原型链实现继承一样，包含引用类型值的属性会被所有实例共享
 */

function object (o) {
  function F() {}
  F.prototype = o
  return new F()
}

function createAnother (original) {
  const clone = object(original)
  clone.sayHi = function () {
    console.log('hi')
  }
  return clone
}

const person = {
  name: 'Yeoman',
  hobbies: ['reading', 'running']
}

const person1 = createAnother(person)
person1.sayHi()
